﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZJF.DelegateTest._01_引入委托;
using ZJF.DelegateTest._02_委托使用方法;

namespace ZJF.DelegateTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Test2();
            Console.Read();
        }

        static void Test1() {
            AA a = new AA();
            BB b = new BB(a);
            b.bb();
        }

        static void Test2() {
            DelegateTest1 dt1 = new DelegateTest1();
            //【3】创建委托变量
            SayHi sayHi = new SayHi(dt1.TestSayHi);

            //【4】关联委托方法（将某一个或多个具体的方法和一个委托变量关联）
            sayHi += dt1.TestSayHello; 
            //【5】使用委托变量（调用所关联的方法）
            sayHi();
        }
    }

    // 【1】声明委托类型（定义方法的原型），一般委托都要声明在类的外面，委托本身也是一种特殊的数据类型。
    public delegate void SayHi();
}
